package cn.hsw.platform.core.base;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.io.Serializable;
import java.util.List;

/**
 * service 父类
 * @author 李子木
 * @date 2020-10-30
 */
public interface BaseService<T, ID extends Serializable> {

    /**
     * 查找全部
     * @return List<T>
     */
    List<T> findAll();

    /**
     * 根据排序信息查找列表
     * @param sort 排序信息
     * @return List<T>
     */
    List<T> findAll(Sort sort);

    /**
     * 根据多个主键ID查询列表
     * @param ids 主键ID列表
     * @return List<T>
     */
    List<T> findAll(Iterable<ID> ids);

    /**
     * 根据分页信息查询列表
     * @param pageable 分页信息
     * @return Page<T>
     */
    Page<T> findAll(Pageable pageable);

    /**
     * 根据ID删除
     * @param id 主键ID
     */
    void delete(ID id) ;


    /**
     * 根据内容删除
     * @param entity 要删除的实体
     */
    void delete(T entity);

    /**
     * 根据列表删除
     * @param entities 多个要删除实体
     */
    void delete(Iterable<? extends T> entities);

    /**
     * 删除全部
     */
    void deleteAll();

    /**
     * 通过主键ID查询
     * @param id 主键ID
     * @return T
     */
    T findById(ID id);

    /**
     * 存储
     * @param t 实体
     * @return 存储后对象
     */
    T save(T t);

    /**
     * 存储全部
     * @param entities 实体列表
     * @return 存储后的列表
     */
    List<? extends T> save(Iterable<? extends T> entities);
}
